Android PreferenceScreen 使用

您所在的位置:网站首页 preference 用法 Android PreferenceScreen 使用

Android PreferenceScreen 使用

#Android PreferenceScreen 使用| 来源: 网络整理| 查看: 265

最近刚从上家公司离职,面对市场的需求,混合型的APP开发岗位越来越多,刚好有朋友叫我帮忙写一个Android的设置页面,用koltin写,撸起袖子开始干

需求

写个设置页面,

什么通知的开关,

声音的开关,

APP里面的内容的隐藏和显示的开关,

还有一个文本输入框,

和一个提交按钮

技术选型

listview可以实现,我之前用过,要自己写缓存

recycleView 也可以实现,用的不太多,要自己写缓存

PreferenceScreen也可以实现,不用自己缓存,只要设置缓存的key就行了

最后为了方便,不花时间我果断的选择了第三个PreferenceScreen(安卓集成设置ui件),不用写缓存,就是Google 准备给我们这种懒人准备的

技术实施

1.打开项目的android sutdiotio ,选择项目的build.gradle,打开工程,

2.选中你的包,然后右击,new->activity->settingActivity,然后你的设置页面就成功了

3.新建成功后,layout下的xml 只有上面这块布局,重要的布局在你的xml文件夹下,有个文件名称叫做oot_preferences.xml 里面有一些样例,类似SwitchPreferenceCompat表示加载的一个开关按钮,

4.但是系统给的这么少的组件,我需要自定义然后我就是度娘+Google,然后发现可以设置静态的布局

//可以设置自定义的layout,如果使用Preference这个最好放一些静态的,你不想获取他的内部的组件,因为它不可以使用getViewById的方法,如果你其他好的方法可以留言

5.突然发现上面那块我需要监听文本的输入,为了能够获取到它的组件,我只能想自定义view一样获取它的内部组件,我就新建了一个class

下面是我新建的对应类来获取它内部的组件的一些监听

class SettingFooterPreference: Preference { private var editText: EditText? = null constructor(context: Context) : this(context, null) constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : this(context, attrs, defStyleAttr, 0) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr) override fun onBindViewHolder(holder: PreferenceViewHolder?) { super.onBindViewHolder(holder) editText = holder?.findViewById(R.id.setting_editText) as EditText //这里可以获取他的内部组件,可以监听他的内容改变等 } }

6.这样就可以通过构造对应的类来实现内部的组件的监听,直接通过Preference是无法拿到内部layout的组件的,这个我已经Google和百度了8个小时,也问了好几个做Android的朋友,使用这个开发设置页面的也少。

7.加个小tips

Preference 会自带小的分割线,我要把分割线去掉,需要重写,这个类在你的设置的activity ,我这边是是SettingActvity

class SettingsFragment : PreferenceFragmentCompat(){ override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.root_preferences, rootKey) //这里可以获取到preferent的对象,可以监听值的改变 val notifi : Preference? = findPreference("setting_notification_key") val onPreferenceChangeListener = notifi?.setOnPreferenceChangeListener(this) } override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean { Log.e("preference", "Pending Preference value is: $newValue") if (preference?.key == "setting_notification_key"){ println("我在操作通知开关哦") } return true } //重写分割线的颜色 override fun setDivider(divider: Drawable?) { super.setDivider(ColorDrawable(Color.TRANSPARENT)) } //重写分割线的高度,我这边不需要写成0,相当于去掉 override fun setDividerHeight(height: Int) { super.setDividerHeight(0) } }

交付

花了一天时间交付了设置页面

附录

感谢一些博主的分享,特别是【UI篇1】自定义Preference这个博主的分享,知识在于学习,学成的乐趣在于分享。我也把我的经验分享给大家。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3